package com.gateway.filter;

import java.util.Arrays;
import java.util.List;

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;

/**
 * 自定义局部过滤器：类名必须是配置的过滤器名+GatewayFilterFactory
 * 
 * @author gzp
 *
 */
@Component
public class MyFilterGatewayFilterFactory extends AbstractGatewayFilterFactory<MyFilterGatewayFilterFactory.Config> {

	private static final String PARAM_NAME = "param";

	public MyFilterGatewayFilterFactory() {
		super(Config.class);
	}

	public List<String> shortcutFieldOrder() {
		return Arrays.asList(PARAM_NAME);
	}

	@Override
	public GatewayFilter apply(Config config) {
		return (exchange, chain) -> {
			// 获取请求参数中param对应的参数名的参数值
			ServerHttpRequest request = exchange.getRequest();
			if (request.getQueryParams().containsKey(config.param)) {
				request.getQueryParams().get(config.param)
						.forEach(value -> System.out.printf("--------局部过滤器-----%s = %s-------", config.param, value));
			}
			return chain.filter(exchange);
		};
	}

	public static class Config {
		// 对应在配置过滤器的时候指定的参数名
		private String param;

		public String getParam() {
			return param;
		}

		public void setParam(String param) {
			this.param = param;
		}

	}

}
